home *** CD-ROM | disk | FTP | other *** search
File List | 1986-10-19 | 10.2 KB | 406 lines |
- ' ****************
- ' *** FILE.LST ***
- ' ****************
- '
- DEFWRD "a-z"
- '
- > PROCEDURE file.length(file$,VAR length%)
- ' *** length of file (bytes)
- OPEN "I",#99,file$
- length%=LOF(#99)
- CLOSE #99
- RETURN
- ' **********
- '
- > PROCEDURE parse.filename(parse.name$,VAR drive$,path$,file$,ext$)
- ' *** return drive, path, filename (without extension !) and extension
- ' *** no checking for correct syntax
- ' *** example : "A:\GAMES\PLAY.GFA" returned as : A \GAMES\ PLAY GFA
- ' *** "A:\PLAY.GFA" returned as : A \ PLAY GFA
- LOCAL pos,first,last,last!,search,parse.file$
- '
- parse.name$=UPPER$(parse.name$)
- IF MID$(parse.name$,2,1)=":"
- drive$=LEFT$(parse.name$,1)
- ELSE
- drive$=CHR$(65+GEMDOS(&H19)) ! current drive
- ENDIF
- '
- pos=1
- last!=FALSE
- last=0
- first=INSTR(1,parse.name$,"\")
- REPEAT
- search=INSTR(pos,parse.name$,"\")
- IF search>0
- pos=search+1
- last=search
- ELSE
- last!=TRUE
- ENDIF
- UNTIL last!
- IF last>0 ! backslash discovered
- path$=MID$(parse.name$,first,last-first+1)
- parse.file$=MID$(parse.name$,last+1)
- ELSE ! no '\'
- path$=""
- pos=INSTR(1,parse.name$,":")
- IF pos>0
- parse.file$=MID$(parse.name$,pos+1)
- ELSE
- parse.file$=parse.name$
- ENDIF
- ENDIF
- pos=INSTR(parse.file$,".")
- IF pos>0 ! name with extension
- ext$=MID$(parse.file$,pos+1)
- file$=LEFT$(parse.file$,pos-1)
- ELSE ! name without extension
- ext$=""
- file$=parse.file$
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE get.path(VAR default.path$)
- ' *** return default path (current drive and folder)
- ' *** example - A:\GAMES\
- ' *** WARNING : Procedure returns path$ only after CHDIR path$, else A:\
- ' *** (even if program not in main directory !!)
- LOCAL default.drive,default.drive$
- CLR default.path$
- default.drive=GEMDOS(&H19)
- default.drive$=CHR$(default.drive+65)
- default.path$=DIR$(default.drive+1)
- IF default.path$<>""
- default.path$=default.drive$+":"+default.path$+"\"
- ELSE
- default.path$=default.drive$+":\"
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE file.copy(source$,dest$)
- ' *** copy file source$ to dest$
- ' *** global : FILE.COPY!
- LOCAL m$,k,p,file$,block%
- IF source$=dest$ ! protect user against disaster
- m$="File-copy|aborted|(source =|destination)"
- ALERT 3,m$,1,"OK",k
- file.copy!=FALSE
- ELSE
- IF EXIST(dest$)
- m$=UPPER$(dest$)+"|already exists:|Kill file, or|Rename as *.BAK"
- ALERT 3,m$,0,"KILL|BAK",k
- IF k=1
- KILL dest$
- ELSE
- p=INSTR(dest$,".")
- IF p>0
- file$=LEFT$(dest$,p)+"BAK"
- ELSE
- file$=dest$+".BAK"
- ENDIF
- RENAME dest$ AS file$
- ENDIF
- ENDIF
- OPEN "I",#90,source$
- OPEN "O",#91,dest$
- block%=LOF(#90)
- WHILE block%>32000
- PRINT #91,INPUT$(32000,#90);
- SUB block%,32000
- WEND
- PRINT #91,INPUT$(block%,#90);
- CLOSE #90
- CLOSE #91
- file.copy!=TRUE
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE file.move(source$,dest$)
- ' *** move file source$ to dest$ (source$ is killed after copy)
- ' *** global : FILE.MOVE!
- LOCAL m$,k,p,file$,block%
- IF source$=dest$ ! protect user against disaster
- m$="File-move|aborted|(source =|destination)"
- ALERT 3,m$,1," OK ",k
- file.move!=FALSE
- ELSE
- IF EXIST(dest$)
- m$=UPPER$(dest$)+"|already exists:|Kill file, or|Rename as *.BAK"
- ALERT 3,m$,0,"KILL|BAK",k
- IF k=1
- KILL dest$
- ELSE
- p=INSTR(dest$,".")
- IF p>0
- file$=LEFT$(dest$,p)+"BAK"
- ELSE
- file$=dest$+".BAK"
- ENDIF
- RENAME dest$ AS file$
- ENDIF
- ENDIF
- OPEN "I",#90,source$
- OPEN "O",#91,dest$
- block%=LOF(#90)
- WHILE block%>32000
- PRINT #91,INPUT$(32000,#90);
- SUB block%,32000
- WEND
- PRINT #91,INPUT$(block%,#90);
- CLOSE #90
- CLOSE #91
- KILL source$
- file.move!=TRUE
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE execute.prg(file$,bytes%,cmd$)
- ' *** reserve memory and start program file$
- LOCAL free%,m$,k
- IF cmd$<>""
- cmd$=CHR$(LEN(cmd$)+1)+cmd$ ! special commandline-format
- ENDIF
- free%=FRE()
- IF bytes%>free%
- m$="Sorry, insufficient|memory for running|"+file$+"|available"
- ALERT 3,m$,1,"EDIT",k
- EDIT
- ELSE
- RESERVE -bytes%
- SHOWM
- EXEC 0,file$,cmd$,"" ! start program
- RESERVE ! back to GFA-Basic ; return memory to GFA
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE load.file(file$)
- ' *** put file in RAM
- ' *** don't forget to release memory again with RESERVE !!
- LOCAL bytes%,free%,adres%,m$,k
- OPEN "I",#90,file$
- bytes%=LOF(#90)
- CLOSE #90
- free%=FRE()
- IF free%>bytes%
- RESERVE -bytes%
- adres%=HIMEM ! should adres% be even ??
- BLOAD file$,adres%
- ELSE
- m$="not enough memory|for loading|"+file$
- ALERT 3,m$,1,"EDIT",k
- EDIT
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE activate.accessory
- ' *** activate accessory by changing extension .ACX into .ACC
- ' *** accessories have to be in main directory
- ' *** uses Procedure Fileselect
- LOCAL file$,acc$,m$,k
- DO
- CLS
- @fileselect("\*.ACX","","Activate accessories (<Cancel> = Stop)",file$)
- EXIT IF file$="" OR RIGHT$(file$)="\"
- acc$=LEFT$(file$,INSTR(file$,".")-1)
- NAME file$ AS acc$+".ACC"
- LOOP
- m$="|reset computer ?"
- ALERT 3,m$,0,"YES| NO",k
- IF k=1
- VOID XBIOS(38,L:LPEEK(4))
- ENDIF
- RETURN
- ' ***
- > PROCEDURE remove.accessory
- ' *** deactivate accessory by changing extension .ACC into .ACX
- ' *** uses Procedure Fileselect
- LOCAL file$,acc$,m$,k
- DO
- CLS
- PRINT " Deactivate accessories (<Cancel> = Stop)"
- FILESELECT "\*.ACC","",file$
- @fileselect("\*.ACC","","Deactivate accessories (<Cancel> = Stop)",file$)
- EXIT IF file$="" OR RIGHT$(file$)="\"
- acc$=LEFT$(file$,INSTR(file$,".")-1)
- NAME file$ AS acc$+".ACX"
- LOOP
- m$="|reset computer ?"
- ALERT 3,m$,0,"YES| NO",k
- IF k=1
- VOID XBIOS(38,L:LPEEK(4))
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE get.archive(arch$,VAR set!)
- ' *** examine archive-bit of file arch$
- LOCAL flag
- flag=FSFIRST(arch$,32)
- IF flag=0
- set!=TRUE
- ELSE
- set!=FALSE
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE get.file.attributes(get.file$)
- ' *** return file-attributes of file
- ' *** global : ATTR.READ.ONLY! ATTR.HIDDEN! ATTR.SYSTEM! ATTR.LABEL!
- ' *** ATTR.FOLDER! ATTR.ARCHIVE!
- LOCAL path$,path%,attr%,k
- path$=get.file$+CHR$(0)
- path%=V:path$
- attr%=GEMDOS(&H43,L:path%,0,0)
- IF attr%=-33
- ALERT 3," *** file-error ***| |"+get.file$+"|not found",1," OK ",k
- ELSE IF attr%=-34
- ALERT 3," *** path-error ***| |"+get.file$+"|not found",1," OK ",k
- ENDIF
- CLR attr.read.only!,attr.hidden!,attr.system!,attr.label!,attr.folder!,attr.archive!
- IF attr%<>-33 AND attr%<>-34
- IF BTST(attr%,0)
- attr.read.only!=TRUE
- ENDIF
- IF BTST(attr%,1)
- attr.hidden!=TRUE
- ENDIF
- IF BTST(attr%,2)
- attr.system!=TRUE
- ENDIF
- IF BTST(attr%,3)
- attr.label!=TRUE
- ENDIF
- IF BTST(attr%,4)
- attr.folder!=TRUE
- ENDIF
- IF BTST(attr%,5)
- attr.archive!=TRUE
- ENDIF
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE set.file.attributes(set.file$,read.only!,hidden!,system!,archive!)
- ' *** set file-attributes of file
- LOCAL path$,path%,attr,a%,k
- path$=set.file$+CHR$(0)
- attr=0
- IF read.only!
- attr=BSET(attr,0)
- ENDIF
- IF hidden!
- attr=BSET(attr,1)
- ENDIF
- IF system!
- attr=BSET(attr,2)
- ENDIF
- IF archive!
- attr=BSET(attr,5)
- ENDIF
- a%=GEMDOS(&H43,L:path%,1,attr)
- IF a%=-33
- ALERT 3," *** file-error ***| |"+set.file$+"|not found",1," OK ",k
- ELSE IF a%=-34
- ALERT 3," *** path-error ***| |"+set.file$+"|not found",1," OK ",k
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE scrap.write(txt$)
- ' *** send message (<160 bytes) through scrap-library
- ' *** receiving program uses Procedure Scrap.read
- LOCAL buffer$,r%,m$,k
- buffer$=SPACE$(160)
- txt$=txt$+CHR$(0)
- LSET buffer$=txt$
- r%=SCRP_WRITE(buffer$)
- IF r%=0
- m$="scrap-library| |*** error ***"
- ALERT 3,m$,1,"EDIT",k
- EDIT
- ENDIF
- RETURN
- ' ***********
- '
- > PROCEDURE scrap.read(VAR txt$)
- ' *** read scrap-library
- LOCAL buffer$,r%,m$,k
- buffer$=SPACE$(160)
- r%=SCRP_READ(buffer$)
- IF r%=0
- m$="scrap-library| |*** error ***"
- ALERT 3,m$,1,"EDIT",k
- EDIT
- ENDIF
- txt$=CHAR{V:buffer$}
- RETURN
- ' **********
- '
- > PROCEDURE fileselect(path$,default$,txt$,left$,right$,VAR file$)
- ' *** use Fileselector with comment-line in High or Medium resolution
- ' *** print optional title (light text) to the left and right of Fileselector
- ' *** comment-line max. 38 characters
- ' *** uses Standard Function and Globals
- LOCAL screen$,y.fac
- SGET screen$ ! delete if not necessary
- CLS
- IF high.res!
- y.fac=1
- ELSE
- y.fac=2
- ENDIF
- DEFTEXT black,2,900,32
- TEXT 100,350/y.fac,300/y.fac,left$
- DEFTEXT ,,2700
- TEXT 540,50/y.fac,300/y.fac,right$
- DEFTEXT ,0,0,13
- PRINT AT(1,3);@center$(txt$)
- GRAPHMODE 3
- DEFFILL 1,1 ! black
- BOUNDARY 0
- IF high.res!
- BOX 157,25,482,54
- PLOT 157,25
- PBOX 159,27,480,52
- ELSE
- BOX 157,12,482,27
- PLOT 157,12
- PBOX 160,14,479,24
- ENDIF
- BOUNDARY 1
- GRAPHMODE 1
- FILESELECT path$,default$,file$
- SPUT screen$ ! delete if not necessary
- RETURN
- ' **********
- '
- > PROCEDURE fileselect.low(path$,default$,txt$,VAR file$)
- ' *** use Fileselector with comment-line in Low-resolution
- ' *** comment-line max. 38 characters
- ' *** uses Standard Function and Globals
- LOCAL screen$
- SGET screen$ ! delete if not necessary
- CLS
- PRINT AT(1,3);@center$(txt$)
- GRAPHMODE 3
- DEFFILL 1,1 ! black
- BOUNDARY 0
- BOX 0,12,319,27
- PLOT 0,12
- PBOX 2,14,317,24
- BOUNDARY 1
- GRAPHMODE 1
- FILESELECT path$,default$,file$
- SPUT screen$ ! delete if not necessary
- RETURN
- ' **********
- '
-